package com.java.threadsafe.unvsafe;

/*
 * 两个线程共享了同一个变量,是线程不安全的
 * 有两种解决方法：
 * A:抛弃单实例，多线程的方式；用多实例，多线程的方式；最传统的方式，不够灵活-见com.java.threadsafe.safe1;
 * B:不使用实例变量，尽可能把变量封装到方法内部-见com.java.threadsafe.safe2
 * C:从jdk1.2后，推出了threadlocal对象，它作为线程的一个局部变量，可以为每个线程创建一个副本，
 * 	  用来保存每个线程的属性，各是各的，互不干扰。单每个 threadlocal变量只能保存一个变量，假如有多
 *   个变量要保存，那么就要写多个threadlocal对象-见com.java.threadsafe.safe3
 */
public class Unsafe {
	public static void main(String args[]) {
		Runnable entity = new ThreadEntity();
		Thread thread1 = new Thread(entity, "thread1");
		Thread thread2 = new Thread(entity, "thread2");
		thread1.start();
		thread2.start();
	}
}

/* 运行结果:
	thread2 ---- 3
	thread1 ---- 3
	thread2 ---- 5
	thread1 ---- 5
	thread2 ---- 7
	thread1 ---- 7
	thread1 ---- 9
	thread2 ---- 9
	thread1 ---- 11
	thread2 ---- 11
*/
